from abc import ABCMeta, abstractmethod
from collections import namedtuple

from six import add_metaclass


class GlobalMessage(
    namedtuple("GlobalMessage", ["uuid", "content", "severity", "media_type_name",])
):
    def to_dict(self):
        return {
            "uuid": self.uuid,
            "content": self.content,
            "severity": self.severity,
            "media_type": self.media_type_name,
        }


@add_metaclass(ABCMeta)
class GlobalMessageDataInterface(object):
    """
    Data interface for globalmessages API.
    """

    @abstractmethod
    def get_all_messages(self):
        """
    
    Returns:
    list(GlobalMessage)
    """

    @abstractmethod
    def create_message(self, severity, media_type_name, content):
        """
    
    Returns:
    GlobalMessage or None
    """

    @abstractmethod
    def delete_message(self, uuid):
        """
    
    Returns:
    void
    """
